1.16. Вектор и растр
Вектор и растр
Компьютерная графика — это совокупность методов и средств, позволяющих создавать, хранить, обрабатывать и отображать изображения с использованием вычислительной техники. На практике почти все визуальные объекты, с которыми сталкивается пользователь в цифровой среде — от иконок и интерфейсов до фотографий и анимаций — строятся на основе двух фундаментальных принципов представления изображений: растрового и векторного. Эти принципы различаются технической реализацией, областью применимости, ограничениями, а также логикой взаимодействия с ними на этапах разработки, редактирования и отображения.
1. Растровая графика: изображение как сетка дискретных элементов
1.1. Основной принцип
Растровое изображение — это двумерный массив, в котором каждый элемент массива соответствует одной точке изображения, называемой пикселем (от picture element). Таким образом, изображение представляется в виде прямоугольной сетки, упорядоченной по строкам и столбцам. Каждый пиксель кодирует информацию о цвете, а в некоторых случаях — и о прозрачности.
В памяти компьютера такое изображение хранится в виде битовой или байтовой последовательности, где каждый пиксель занимает фиксированное количество бит в зависимости от используемой цветовой модели. При отображении на устройстве (мониторе, принтере, проекторе) пиксели выводятся строго в заданном порядке, и конечное визуальное впечатление зависит от физического разрешения устройства, а также от соотношения между логическим разрешением изображения и физическим разрешением вывода.
1.2. Цветовое представление
Наиболее распространённая модель — RGB (Red, Green, Blue), в которой цвет каждого пикселя определяется тремя компонентами: интенсивностью красного, зелёного и синего каналов. В классическом 24-битном варианте каждому каналу отводится по 8 бит, что даёт 256 градаций на канал и около 16,7 миллионов уникальных цветовых комбинаций.
Важным расширением является альфа-канал (A), добавляющий четвёртый компонент — степень прозрачности пикселя. Такой формат обозначается как RGBA и позволяет создавать изображения с плавными переходами от непрозрачной части к прозрачной, что критично, например, для иконок с закруглёнными краями или сложных композитных сцен.
Другие модели — CMYK (используется в полиграфии), HSV/HSL (удобна для ручной настройки оттенков), YUV/YCbCr (оптимизирована для видеокодеков) — также могут применяться, но при хранении в растровом виде обычно преобразуются либо в RGB, либо в промежуточные формы, совместимые с целевой платформой.
1.3. Разрешение и плотность
Разрешение растрового изображения — это количество пикселей по горизонтали и вертикали (например, 1920×1080). Чем выше разрешение, тем больше деталей может быть зафиксировано, но одновременно растёт объём данных.
При этом важно различать абсолютное разрешение (в пикселях) и относительную плотность, такую как PPI (pixels per inch) или DPI (dots per inch). Первое — техническая характеристика устройства вывода, второе — условная метрика, применяемая в печати и макетировании.
Если растровое изображение выводится на устройство с физическим разрешением, отличным от его собственного (например, 72 PPI-картинка на 300 DPI-принтер), происходит либо интерполяция (увеличение или уменьшение количества пикселей), либо масштабирование «в лоб» — когда один пиксель изображения отображается несколькими физическими точками, что приводит к потере резкости или, наоборот, к избыточному «размазыванию».
1.4. Сжатие и форматы
Без сжатия объём данных растрового изображения пропорционален произведению ширины, высоты и количества бит на пиксель. Для изображения Full HD (1920×1080) в 32-битном RGBA режиме это уже около 8,3 МБ в несжатом виде (1920 * 1080 * 4 = ~8,3 млн байт). Поэтому в практических системах почти повсеместно применяются алгоритмы сжатия.
Существует два основных типа:
-
Без потерь (lossless): исходные данные могут быть восстановлены точно. Примеры: PNG, GIF (для индексированных цветов), TIFF (в соответствующем режиме), WebP lossless, FLIF, AVIF lossless. Такие форматы предпочтительны для графики с чёткими границами, диаграммами, текстом и прозрачностью.
-
С потерями (lossy): часть информации отбрасывается ради уменьшения размера. Примеры: JPEG, WebP lossy, AVIF lossy. Эффективны для фотографий и изображений с плавными градиентами, но плохо справляются с резкими переходами (например, текстом на однотонном фоне), вызывая артефакты сжатия — «блочные искажения», размытость, цветовой шум.
Сжатие может быть как внутренним (встроенным в формат файла), так и внешним (например, при упаковке в ZIP-архив или при HTTP-сжатии на уровне сервера). Особенно важно учитывать это при проектировании API: передача неоптимизированных изображений увеличивает latency и потребление трафика.
1.5. Типичные ограничения растров
-
Зависимость от масштаба: при увеличении изображения выше его исходного разрешения система вынуждена интерполировать новые пиксели. Простейшие методы (например, nearest neighbour) приводят к «лесенкам» и пикселизации; более сложные (bilinear, bicubic, Lanczos) сглаживают границы, но не восстанавливают утраченную информацию.
-
Ограниченная редактируемость: растровое изображение — «плоский» объект. Чтобы изменить отдельный элемент, нужно знать его точные координаты и переписать соответствующие пиксели. Это делает трудоёмким изменение, например, цвета всех кнопок на макете без исходных слоёв (в Photoshop, Figma и т.п.).
-
Зависимость от контекста вывода: одно и то же изображение может выглядеть по-разному на экране с разной плотностью пикселей (Retina vs HD), если не предусмотрена адаптация (например, через
srcsetв HTML или векторные аналоги).
2. Векторная графика
2.1. Основной принцип
В отличие от растровой графики, где изображение фиксируется как набор дискретных значений, векторная графика описывает изображение на уровне геометрических примитивов: точек, линий, дуг, многоугольников, кривых. Каждый элемент задаётся параметрически — через координаты, углы, радиусы, уравнения кривых. Таким образом, векторное изображение — это инструкция для рендерера: «начерти окружность радиуса R с центром в (X,Y), закрась её синим, обведи чёрной линией толщиной 2».
Такой подход делает представление изображения независимым от разрешения вывода. При любом масштабе рендерер пересчитывает позиции и размеры примитивов относительно текущего контекста отображения и заново их отрисовывает. Это обеспечивает абсолютную чёткость границ при любом увеличении — вплоть до печати на широкоформатном станке, где логотип, созданный из нескольких кривых, может занимать метры без единой «лесенки».
С точки зрения данных, векторное изображение — это структурированный документ, часто текстовый (например, SVG — это XML), где каждый графический элемент представлен узлом с атрибутами. Это позволяет эффективно хранить и передавать информацию (файл логотипа из 10 объектов может весить менее 1 КБ) и манипулировать изображением как с данными: изменять цвета через CSS, анимировать координаты в JavaScript, извлекать метаданные, применять трансформации без перекодирования.
2.2. Геометрические примитивы и их параметризация
Основные строительные блоки векторной графики включают:
- Точка — базовый элемент, задаётся парой координат
(x, y)в выбранной системе отсчёта (обычно декартовой, с началом в верхнем левом углу — как в экранной графике). - Прямая линия — определяется двумя точками: начальной и конечной.
- Ломаная линия — последовательность соединённых отрезков, задаётся списком вершин.
- Многоугольник — замкнутая ломаная, может быть выпуклым или вогнутым, с самопересечениями (например, звезда).
- Окружность и эллипс — задаются центром и радиусами (для эллипса — два: по осям X и Y).
- Прямоугольник и скруглённый прямоугольник — определяются позицией левого верхнего угла, шириной, высотой и, при необходимости, радиусом скругления углов.
- Кривые — наиболее важный и выразительный класс. Наиболее распространены кривые Безье, особенно кубические (третьего порядка) и квадратичные (второго порядка). Кубическая кривая Безье описывается четырьмя точками: начальной, конечной и двумя управляющими точками, которые определяют направление и «натяжение» кривой в начале и в конце. Эти кривые позволяют точно аппроксимировать любую плавную форму — от контура буквы до силуэта автомобиля.
Современные векторные форматы также поддерживают составные пути (paths), включающие несколько подпутей, операции над формами (объединение, вычитание, пересечение — через boolean operations), заливки градиентами (линейными, радиальными), а также эффекты: тени, размытия, фильтры (например, в SVG через <filter>).
2.3. Сцена, трансформации и иерархия
Векторное изображение часто моделирует сцену — иерархическую структуру, похожую на DOM в вебе. Элементы могут быть сгруппированы (например, <g> в SVG), к ним применяются трансформации: сдвиг (translate), поворот (rotate), масштаб (scale), искажение (skew). Трансформации накапливаются по цепочке: если группа масштабирована в 2 раза, а внутри неё элемент повёрнут на 45°, то поворот произойдёт уже в масштабированных координатах.
Это открывает мощные возможности композиции: например, иконка «шестерёнка» может быть построена как окружность с восемью зубцами, каждый из которых — повёрнутая копия одного базового элемента. При изменении радиуса окружности все зубцы автоматически пересчитываются. Такой подход лежит в основе параметрического дизайна — принципа, используемого в Figma, Adobe Illustrator, Sketch, где элементы UI (кнопки, иконки, чекбоксы) определяются переменными: padding, border-radius, icon-size, и т.п.
2.4. Форматы хранения и передачи
Наиболее распространённый открытый формат — SVG (Scalable Vector Graphics), основанный на XML. Он поддерживается всеми современными браузерами, может быть встроен непосредственно в HTML (<svg>...</svg>), стилизован через CSS и анимирован через SMIL или JavaScript. Благодаря текстовой природе SVG легко поддаётся минификации, gzip-сжатию, генерации на лету (например, сервером на основе данных).
Другие важные форматы:
- PDF (в векторном режиме) — содержит описания страниц с использованием языка PostScript-подобных операторов; может включать как векторные, так и растровые элементы; универсален для печати и документооборота.
- EPS (Encapsulated PostScript) — устаревший, но до сих пор встречающийся в полиграфии; содержит PostScript-код, обёрнутый в специальную оболочку.
- AI (Adobe Illustrator), FIG (Figma), SKETCH — проприетарные форматы, используемые в соответствующих редакторах; обычно содержат геометрию, слои, стили, прототипы взаимодействий.
В мобильной и десктопной разработке вектор часто используется в виде векторных активов — например, VectorDrawable в Android или PDF Assets в iOS/macOS. Они компилируются в бинарное представление, оптимизированное под рендеринг на конкретной платформе, но сохраняют масштабируемость.
2.5. Рендеринг: от описания к пикселям
Важно осознавать: векторное изображение всё равно становится растровым на этапе отображения. Никакой монитор не умеет «рисовать кривые» напрямую — он выводит только сетку пикселей. Поэтому векторная графика всегда проходит этап растрирования (rasterization), выполняемого либо на CPU (в простых случаях), либо на GPU (в современных UI-фреймворках, играх, вебе через WebGL или Canvas 2D).
Процесс растрирования включает:
- Триангуляцию (для сложных фигур) — разбиение многоугольника на треугольники, которые легко обрабатывать графическим конвейером.
- Определение покрытия — для каждого пикселя вычисляется, попадает ли он внутрь фигуры (с учётом заливки, обводки, прозрачности).
- Антиалиасинг — сглаживание границ путём частичного заполнения пикселей на краях фигур (например, пиксель на границе круга может быть закрашен на 60 % интенсивности, оставшиеся 40 % — фоном).
- Применение эффектов — например, размытие тени требует свёртки с ядром фильтра, что выполняется на растровом буфере.
Ключевое преимущество векторного подхода — растрирование происходит в момент отображения, а не заранее. Это значит, что при смене масштаба, разрешения или DPI система может заново выполнить растрирование с оптимальными параметрами, тогда как у растрового изображения эти параметры зафиксированы на этапе создания.
3. Сравнительный анализ
Выбор между вектором и растром — это вопрос соответствия задаче. Ниже приведён разбор типовых сценариев с обоснованием.
3.1. Фотореалистичные изображения
Фотографии, сканированные изображения, цифровая живопись, рендеры 3D-сцен — все они содержат огромное количество мелких деталей, шум, плавные градиенты, тени, текстуры. Такие данные не поддаются эффективному описанию через геометрические примитивы. Попытка аппроксимировать пиксельное изображение вектором (например, через трассировку — vectorization) приводит либо к экспоненциальному росту числа кривых, либо к потере реализма.
→ Выбор: растр, предпочтительно с адаптивным сжатием (WebP, AVIF) и поддержкой альфа-канала при необходимости.
3.2. Логотипы, иконки, фирменный стиль
Здесь важны точность передачи формы, масштабируемость, возможность изменения цветовой схемы под разные темы (светлая/тёмная), а также минимальный размер активов. Вектор позволяет:
- использовать один файл для всех разрешений (от favicon 16×16 до баннера на билборде);
- динамически перекрашивать элементы (например, через
fill="currentColor"в SVG); - анимировать части изображения (вращение шестерёнки, мигание индикатора).
→ Выбор: вектор, преимущественно SVG с последующей оптимизацией (удаление metadata, сокращение десятичных знаков, inline-вставка в HTML или спрайты).
3.3. Пользовательские интерфейсы
Современные UI-фреймворки (React, Flutter, SwiftUI, Jetpack Compose) построены на декларативном описании интерфейса, где виджеты — это параметризованные компоненты, а не изображения. Кнопка — это объект с width, height, borderRadius, backgroundColor, elevation и т.п. Это по своей сути — векторный подход.
Даже когда используются внешние иконки, предпочтение отдаётся векторным (Icon(svgPathData: "...") в Flutter, SvgPicture.asset() в пакете flutter_svg). Только в исключительных случаях (сложные иллюстрации, анимации с персонажами) подключаются растровые спрайты или Lottie-файлы (которые, к слову, тоже основаны на векторных слоях, но с временной шкалой).
→ Выбор: вектор по умолчанию, растр — по обоснованной необходимости.
3.4. Полиграфия и широкоформатная печать
В профессиональной печати используется модель CMYK и требуются высокие разрешения (300 DPI и выше). Для изображений — фотографий — подготавливаются растровые файлы TIFF или PDF/X с встроенным растром. Но все остальные элементы — обрезочные метки, штрих-коды, тексты, линии отреза, логотипы — передаются в векторной форме. Это гарантирует:
- отсутствие «размытости» при выводе на устройство с разрешением 2400 DPI;
- точное позиционирование (векторные координаты могут быть заданы с микронной точностью);
- возможность редактирования макета без пересборки.
→ Гибридный подход: вектор для формы и текста, растр — для изображений.
3.5. Анимация и интерактивность
Векторная графика интегрируется с программными средами значительно глубже. В SVG можно:
- изменять атрибуты (
cx,cy,d) через JavaScript; - применять CSS-транзишены и анимации;
- реагировать на события мыши или касания (
onMouseOver,onClick); - использовать SMIL для декларативной анимации (хотя поддержка в браузерах ограничена, её часто заменяют на JavaScript или CSS).
Растр в этом плане пассивен: его можно двигать как целое (например, <img> с transform: translate()), но менять внутренние части без перерисовки невозможно.
→ Выбор: вектор, если требуется динамика; растр — если анимация реализована как видеопоток или серия кадров.
4. Пограничные случаи и современные гибриды
На практике строгая граница между вектором и растром всё чаще стирается. Рассмотрим несколько технологий, где они сочетаются.
4.1. SVG с растровыми вставками
SVG позволяет встраивать растровые изображения через <image href="..." />. Это полезно, например, при создании интерактивной карты: общий контур — вектор, а спутниковые снимки областей — растр. При масштабировании вектор остаётся чётким, а растр подгружается в нужном разрешении через tile-сервисы (как в OpenStreetMap).
4.2. Векторные шрифты (TrueType, OpenType)
Шрифты — яркий пример векторной графики в повседневном использовании. Каждый глиф (символ) задаётся контуром, построенным из кривых Безье и прямых. При выводе текста система растрирует глифы под текущий размер, сглаживает их (с использованием hinting или subpixel rendering — ClearType), адаптирует под плотность экрана. Это позволяет использовать один файл шрифта для всех размеров — от 8 pt в примечании до 144 pt в заголовке презентации.
4.3. PDF как контейнер
PDF-документ может содержать:
- векторные элементы (текст, линии, диаграммы);
- растровые изображения (фотографии, сканы);
- шрифты (встроенные или ссылки);
- интерактивные формы, ссылки, слои.
Он сохраняет структуру, что делает его стандартом для обмена документами. При этом PDF-ридеры могут перестраивать отображение под разные экраны (например, мобильный режим с перекомпоновкой текста в некоторых реализациях), но сами векторные примитивы при этом не теряют точности.
4.4. Canvas API и WebGL
В вебе <canvas> предоставляет битовый буфер — по сути, это растровая поверхность. Однако на неё можно рисовать как растровые данные (drawImage()), так и векторные примитивы (lineTo(), arc(), bezierCurveTo()). В первом случае используется уже готовый растр; во втором — браузер растрирует примитивы на лету. Аналогично в WebGL: геометрия задаётся вершинами и индексами (векторно), но финальный вывод — всегда растровый фреймбуфер.
Это демонстрирует глубинную истину: все изображения в итоге становятся растром, но способ их описания до растрирования определяет гибкость, точность и эффективность.
5. Интеграция векторной и растровой графики в программные системы
Выбор формата изображения — это не изолированное решение дизайнера. Оно формирует цепочку зависимостей в архитектуре программного продукта: от этапа разработки и сборки до доставки пользователю и рендеринга на устройстве. Ниже рассмотрены ключевые инженерные аспекты, возникающие при работе с обоими типами графики.
5.1. Управление графическими активами в проекте
В современных проектах графические ресурсы (assets) рассматриваются как часть кодовой базы, а не как «медиафайлы на облаке». Это требует применения практик, аналогичных управлению исходным кодом:
- Версионирование: все иконки, логотипы, иллюстрации хранятся в системе контроля версий (Git). Это позволяет отслеживать изменения, проводить ревью (например, через diff SVG), откатывать ошибки.
- Единая точка входа: рекомендуется централизовать доступ к графике — например, через модуль
assets/, содержащий подкаталогиicons/,illustrations/,logos/, с чёткой иерархией имён (icon-user.svg,illustration-onboarding-02.png). Это упрощает рефакторинг и поиск. - Автоматизированная обработка: в CI/CD встраиваются шаги по оптимизации:
- для SVG —
svgo(удаление метаданных, сокращениеpath-данных, инлайнинг стилей); - для PNG —
pngquant,oxipng(сжатие с сохранением альфа-канала); - для JPEG/WebP —
sharp,imagemagick(ресайз под нужные разрешения, конвертация, quality tuning).
- для SVG —
Важный нюанс: не все оптимизаторы одинаково полезны. Например, агрессивное упрощение кривых в SVG (--precision=1) может исказить тонкие детали в логотипе. Поэтому для критичных активов (брендовые элементы) применяются строгие правила: минимальная оптимизация, ручная проверка после каждого изменения.
5.2. Доставка графики в веб-приложениях
В вебе разница между вектором и растром проявляется особенно остро из-за разнообразия устройств и сетевых условий.
5.2.1. Вектор (SVG)
- Inline-вставка (
<svg>…</svg>прямо в HTML) — самый эффективный способ: избегается HTTP-запрос, SVG становится частью DOM, доступен для стилизации и анимации через CSS/JS. Подходит для иконок, небольших иллюстраций (< 5–10 КБ). - Спрайты — объединение множества иконок в один SVG-файл с использованием
<symbol id="icon-1">…</symbol>, а в основном документе —<use href="sprite.svg#icon-1"/>. Это снижает количество запросов и позволяет кэшировать спрайт на длительный срок. - Внешние файлы — при больших размерах (например, интерактивные диаграммы) целесообразно загружать SVG как отдельный ресурс (
<img src="chart.svg">илиfetch()+DOMParser). Это изолирует графику от основного HTML и позволяет применять кэширование по ETag.
Ограничение: инлайн и спрайты не поддерживают кросс-доменную загрузку при использовании CSP без unsafe-inline или nonce/hash, что требует дополнительной настройки.
5.2.2. Растр (PNG, JPEG, WebP, AVIF)
Здесь ключевая проблема — разрешение экрана. Устройства с Retina-дисплеями требуют изображений с удвоенной (или утроенной) плотностью пикселей (@2x, @3x), иначе картинка выглядит размытой.
Решения:
- Атрибут
srcset— позволяет браузеру выбрать наиболее подходящее изображение:<img
src="logo-1x.png"
srcset="logo-1x.png 1x, logo-2x.png 2x, logo-3x.png 3x"
alt="Логотип"
/> - Элемент
<picture>— даёт полный контроль над выбором формата и разрешения:<picture>
<source type="image/avif" srcset="photo.avif" />
<source type="image/webp" srcset="photo.webp" />
<img src="photo.jpg" alt="Фотография" />
</picture> - Адаптивный ресайз на backend — сервер возвращает изображение нужного размера в ответ на параметры запроса (например,
?w=320&h=240&f=webp). Это снижает трафик и нагрузку на клиент, но требует инфраструктурной поддержки (CDN с image processing, например, Cloudflare Images, Imgix, или self-hostedsharp-сервис).
Особое внимание — lazys loading: для изображений вне viewport используется loading="lazy", что откладывает загрузку до приближения к области просмотра. Это критично для страниц с сотнями изображений (галереи, каталоги).
5.3. Внедрение в мобильные и десктопные приложения
Android
- VectorDrawable — нативный формат для векторных иконок. Поддерживается с API 21+, для старых версий — через
vectorDrawables.useSupportLibrary = true. Преимущества: масштабируемость, тинтинг (app:tint), анимация черезAnimatedVectorDrawable. - Растровые drawables (
drawable-mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi) — требуют подготовки 5+ версий под разные плотности. Это увеличивает размер APK и усложняет поддержку.
Современный подход — использовать VectorDrawable по умолчанию, растровые — только для фотографий или сложных иллюстраций, которые невозможно адекватно представить вектором.
iOS / macOS
- PDF-активы — в Xcode можно добавить PDF-файл как asset, и система автоматически генерирует растровые представления под нужные разрешения (
@1x,@2x,@3x). Это избавляет от ручного управления мультиразрешениями. - SF Symbols — библиотека векторных иконок от Apple, интегрированная в UIKit/SwiftUI. Позволяет менять вес, стиль, цвет, размер динамически.
Flutter
SvgPicture.asset()из пакетаflutter_svg— де-факто стандарт для иконок.- Для изображений —
Image.asset(),Image.network(), с поддержкой кэширования (cached_network_image). - Важно:
flutter_svgне поддерживает все SVG-функции (фильтры, внешние шрифты,<script>), поэтому перед использованием требуется валидация и, при необходимости, ручная доработка.
6. Риски и типичные ошибки проектирования
6.1. «Растровый анти-паттерн»: использование PNG вместо SVG
Частая ошибка — экспортировать иконку из Figma в PNG 24×24 и использовать её во всём интерфейсе. Последствия:
- На Retina-устройствах иконка выглядит размытой (если не подготовлены
@2x,@3x); - Невозможно изменить цвет без генерации новой картинки (например, для disabled-состояния);
- Увеличение размера приложения за счёт нескольких копий одного изображения;
- Отсутствие поддержки темной/светлой темы без дублирования.
Решение: экспортировать иконки как SVG, интегрировать через спрайт или инлайн, использовать CSS-переменные или currentColor для окраски.
6.2. Перегрузка вектора
Вектор эффективен для геометрических форм, но не для фотореалистичных сцен. Попытка конвертировать фотографию в SVG (например, через онлайн-трассировку) часто приводит к файлам по 10–50 МБ, состоящим из десятков тысяч мелких полигонов. Такие файлы:
- Долго парсятся и растрируются;
- Перегружают GPU при анимации;
- Не сжимаются эффективно (SVG — текстовый, но при большом объёме gzip помогает слабо);
- Плохо кэшируются.
Решение: использовать растровые форматы с современным сжатием (AVIF для статики, WebP для баланса совместимости/качества). Вектор — только там, где он действительно оправдан.
6.3. Игнорирование цветовых профилей и gamma-коррекции
Растр может содержать встроенные цветовые профили (sRGB, Adobe RGB, Display P3). Если профиль не указан или обработан неверно, изображение будет выглядеть иначе на разных устройствах — например, «пересыщенным» на MacBook с P3-дисплеем.
Рекомендации:
- Все веб-изображения должны быть в sRGB (стандарт для браузеров);
- При экспорте из редакторов (Photoshop, Affinity) явно указывать профиль и конвертировать при сохранении;
- Не использовать Adobe RGB или ProPhoto RGB в пользовательских интерфейсах.
6.4. Отсутствие альтернативного текста и семантики
Изображения — часть доступности (a11y). Для растровых <img> обязателен alt; для векторных — либо aria-label, либо семантическое описание внутри SVG (<title>, <desc>):
<svg viewBox="0 0 24 24" aria-labelledby="icon-title">
<title id="icon-title">Поиск</title>
<path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>
</svg>
Пренебрежение этим нарушает требования WCAG и снижает удобство для пользователей скринридеров.
7. Перспективы и эволюция представлений
7.1. Векторные нейросетевые представления
Традиционные векторные форматы (SVG, PDF) основаны на явном описании примитивов. Современные исследования в области машинного обучения направлены на неявное параметрическое представление форм:
- SPIRAL, SVG-VAE — модели, генерирующие SVG-код из изображения или латентного вектора;
- CLIPasso — метод, аппроксимирующий изображение небольшим числом кривых Безье, обучаясь через дифференцируемый рендерер;
- DeepSVG — архитектура, понимающая семантику SVG-элементов, позволяющая редактировать изображение через естественный язык.
Эти технологии пока не вошли в production, но они открывают путь к самооптимизирующимся графикам: изображение, которое адаптирует сложность своего описания под разрешение вывода — при 16×16 использует 3 кривые, при 4K — 200, но сохраняет единый исходный файл.
7.2. Дифференцируемый рендеринг
Ключевая проблема классической графики — необратимость растрирования: из пикселей нельзя точно восстановить исходные кривые. Новые подходы (например, DiffVG, Neural Vector Graphics) строят рендерер как дифференцируемую функцию, позволяя оптимизировать параметры вектора под целевой растр с помощью градиентного спуска. Это может революционизировать:
- автоматическую трассировку;
- сжатие (хранить не растр, а параметры вектора, генерирующего «достаточно близкий» растр);
- стилизацию (переносить художественный стиль на векторное изображение без потери масштабируемости).
7.3. NeRF и объёмная графика
Хотя Neural Radiance Fields (NeRF) формально не относятся ни к вектору, ни к растре, они ставят под вопрос саму парадигму 2D-изображений. NeRF описывает сцену как непрерывную функцию плотности и цвета в трёхмерном пространстве. Рендеринг выполняется путём трассировки лучей с последующей выборкой этой функции. Результат — фотореалистичные изображения с произвольным ракурсом и освещением.
Связь с темой: NeRF — это попытка вернуть аналитическое описание (как у вектора), но для сложных, «негеометричных» объектов (туман, кожа, листва), где классический вектор бессилен. Возможно, будущее — в мультимодальных представлениях, где геометрия (вектор), текстура (растр) и свет (NeRF/параметрические шейдеры) объединяются в единую модель.